package br.com.sgi.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.sgi.autentication.UsuarioLogado;
import br.com.sgi.dao.IgrejaDao;
import br.com.sgi.model.Igreja;
import br.com.sgi.service.IgrejaService;

@Service("igrejaService")
public class IgrejaServiceImpl implements IgrejaService {
	
	@Autowired
	private IgrejaDao igrejaDao;


	@Override
	public Igreja buscarIgrejaPorId(Long id) {
		 Map<String, Object>  params = new java.util.HashMap<String, Object>();
		 params.put("coSeqIgreja",id);
		return igrejaDao.findByNamedId("buscarIgrejaPorId", params);
	}

	@Override
	public void salvar(Igreja igreja) {
			igrejaDao.save(igreja);
	}
	/**
	 * busca igreja por codigo, nome ou cnpj
	 */
	@Override
	public List<Igreja> buscarIgrejasPorFiltros(String nome, Long codigo, String cnpj) {
		 Map<String, Object>  params = new java.util.HashMap<String, Object>();
			
		 StringBuilder sql =  new StringBuilder();
		
		sql.append(" FROM Igreja ig ");
		sql.append(" WHERE ig.sistema.coSeqSistema = " + UsuarioLogado.getCoSistema());
		if(!UsuarioLogado.isAdminGeral())
			sql.append(" and ig.coSeqIgreja in ( " + UsuarioLogado.getCoIgrejas() +" )");
			
			if(nome != null && !nome.isEmpty()){
				sql.append(" and ig.nome like :nome ");
				params.put("nome","%" + nome + "%");
			}
			if(codigo != null && codigo != 0){
				sql.append(" and ig.coSeqIgreja = :coSeqIgreja ");
				params.put("coSeqIgreja",codigo);
			}
			if(cnpj != null && !cnpj.isEmpty()){
				
				sql.append(" and ig.cnpj = :cnpj ");
				params.put("cnpj",cnpj);
			}			
		return igrejaDao.findByNativeQuery(sql.toString(), params);
	}

	@Override
	public List<Igreja> buscarTodasIgrejas() {
		 Map<String, Object>  params = new java.util.HashMap<String, Object>();
		return igrejaDao.findByNamedParams("buscarIgrejaPorCoSistema", params);
	}

	@Override
	public void excluir(Long coIgreja) {
		igrejaDao.deleteById(coIgreja);
	}

	@Override
	public void atualizar(Igreja igreja) {
		igrejaDao.update(igreja);
		
	}
	
	@Override
	public List<Igreja> buscarIgrejasPorCoSistema(Long coSistema) {
		 Map<String, Object>  params = new java.util.HashMap<String, Object>();
		 params.put("coSistema", coSistema);
		return igrejaDao.findByNamedParams("buscarIgrejaPorCoSistema", params);
	}

}
